<?php

namespace App\Containers\AppSection\Questionnaire\Models;

use App\Containers\AppSection\Type\Models\Type;
use App\Ship\Parents\Models\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * Поле
 *
 * @property int $id Id
 * @property string $key Ключ
 * @property string $type_key Тип поля
 * @property string $label Описание
 * @property string $placeholder Подсказка
 * @property array $options Опции
 * @property array $default По умолчанию
 * @property int $order Сортировка
 * @property array $depends_key Зависит от ключей
 * @property array $depends_value Зависит от значений
 * @property string $form_id Форма
 * @property bool $required Обязательное поле
 *
 * @property Type $type Тип поля
 * @property Form $form Форма
 */
class Field extends Model
{
    public $timestamps = false;
    protected $fillable = [
        'key',
        'type_key',
        'label',
        'placeholder',
        'options',
        'default',
        'order',
        'depends_key',
        'depends_value',
        'form_id',
        'required',
    ];
    protected $dates = [
        'created_at',
        'updated_at',
    ];
    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'Field';
    protected $table = 'questionnaire_fields';
    protected $casts = [
        'options' => 'json',
        'default' => 'json',
        'depends_key' => 'json',
        'depends_value' => 'json',
    ];

    /**
     * Форма
     * @return BelongsTo Form
     */
    public function form(): BelongsTo
    {
        return $this->belongsTo(Form::class, 'form_id', 'id');
    }

    /**
     * Тип поля
     * @return BelongsTo Type
     */
    public function type(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'type_key', 'key');
    }
}
